package com.vote.system.service.impl;

import com.vote.common.core.domain.entity.SysRole;
import com.vote.common.core.domain.entity.SysUser;
import com.vote.common.utils.SecurityUtils;
import com.vote.system.domain.SysUserRole;
import com.vote.system.mapper.SysUserMapper;
import com.vote.system.mapper.SysUserRoleMapper;
import com.vote.system.service.ISysFrontUserService;
import com.vote.system.service.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

import java.util.ArrayList;

@Service
public class SysFrontUserServiceImpl implements ISysFrontUserService {
    @Autowired
    private SysUserMapper userMapper;

    @Autowired
    private SysUserRoleMapper userRoleMapper;

    @Autowired
    private ISysRoleService roleService;

    /**
     * 前端用户注册核心逻辑
     */
    @Override
    @Transactional  // 事务保证：用户和角色关联必须同时成功/失败
    public boolean registerUser(SysUser user) {
        // 1. 密码加密（使用若依框架默认的BCrypt加密）
        String encryptedPassword = SecurityUtils.encryptPassword(user.getPassword());
        user.setPassword(encryptedPassword);

        // 2. 设置默认信息（创建时间由MyBatis-Plus自动填充，也可手动设置）
        user.setCreateBy("system");  // 创建人：系统（区别于管理员手动添加）
        user.setDeptId(100L);  // 默认为"普通用户"部门（需根据实际部门ID调整）

        // 3. 插入用户表
        int insertResult = userMapper.insertUser(user);
        if (insertResult <= 0) {
            return false;  // 用户插入失败
        }

        // 4. 为新用户分配默认角色：ROLE_USER（普通用户）
        // 查找"普通用户"角色ID（假设角色标识为"ROLE_USER"）
//        SysRole defaultRole = roleService.selectRoleByRoleKey("ROLE_USER");
        SysRole defaultRole = roleService.selectRoleByRoleKey("common");
        if (defaultRole == null) {
            throw new RuntimeException("未配置默认注册角色，请联系管理员");
        }

        // 5. 插入用户-角色关联表
        List<SysUserRole> userRoles = new ArrayList<>();
        SysUserRole userRole = new SysUserRole();
        userRole.setUserId(user.getUserId());  // 新用户ID
        userRole.setRoleId(defaultRole.getRoleId());  // 默认角色ID
        userRoles.add(userRole);

        return userRoleMapper.batchUserRole(userRoles) > 0;
    }

    /**
     * 校验用户名唯一性
     */
    @Override
    public boolean checkUserNameUnique(String userName) {
        return userMapper.checkUserNameUnique(userName)!=null;
    }

    /**
     * 校验手机号唯一性
     */
    @Override
    public boolean checkPhoneUnique(SysUser user) {
        Long userId = user.getUserId() == null ? -1L : user.getUserId();
        SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
        return info != null && !info.getUserId().equals(userId);
    }
}
